<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at
 
     http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing, software 
 distributed under the License is distributed on an "AS IS" BASIS, 
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 See the License for the specific language governing permissions and 
 limitations under the License.
-->

<html>
<head>
<title>JDO package</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF">
This package contains the JDO specification interfaces and classes. 
<P>There are two major objectives of the JDO architecture: 
first, to provide application programmers a transparent,
Java-centric view of persistent information, including enterprise data 
and locally stored data; and second, to enable pluggable implementations 
of data stores into 
application servers.  Data stored in data stores is presented as
instances of persistence-capable classes.
<P>JDO defines interfaces and classes to be used by application programmers 
when using classes whose instances are to be stored in persistent storage 
(persistence-capable classes), and specifies the contracts between 
suppliers of persistence-capable classes and the 
runtime environment (which is part of the JDO implementation).
<P>The JDO architecture defines a standard set of contracts between an 
application programmer and an JDO vendor. These contracts focus on the 
view of the Java instances of persistence capable classes.
<P>The JDO PersistenceManagerFactory is the boostrap class for a JDO
application.  The application gets an instance of the
PersistenceManagerFactory by construction or via JDNI lookup.
<P>The application acquires an instance of the JDO PersistenceManager by
calling the getPersistenceManager method on an instance of JDO
PersistenceManagerFactory.  
<P>The JDO PersistenceManager is the primary interface for JDO-aware 
application components: 
<ul>
<li>it gives access to the current Transaction interface;
<li>it is the factory for the Query interface;
<li>it contains methods for managing the life cycle of persistent instances.
</ul>
<P>A JDO PersistenceManager instance supports any number of JDO instances 
at a time. It is responsible for managing the identity of its 
associated JDO instances. A JDO instance is associated with either 
zero or one JDO PersistenceManager. It will be zero if and only if the 
JDO instance is transient nontransactional. As soon as the instance is made persistent 
or transactional, it will be associated with exactly one JDO PersistenceManager.
<P>A JDO PersistenceManager instance supports one transaction at a time, 
and uses one connection to the underlying data source at a time. The JDO 
PersistenceManager instance might use multiple transactions serially, 
and might use multiple connections serially.
<P>Normally, cache management is automatic and transparent. When instances 
are queried, navigated to, or modified, instantiation of instances and 
their fields and garbage collection of unreferenced instances occurs 
without any explicit control. When the transaction in which persistent 
instances are created, deleted, or modified commits, eviction is 
automatically done by the transaction completion mechanisms. 
<P>Operations on persistent JDO instances at the user's choice might be 
performed in the context of a transaction. That is, the view of data 
in the data store is transactionally consistent, according to the 
standard definition of ACID transactions.
<P>The Transaction interface is used to mark the beginning and end of a 
application-defined unit of work.  The PersistenceManager allows the 
application to get the instance that manages these transactional
boundaries via the currentTransaction method.
<P>The persistent manager instance is a factory for query instances, 
and queries are executed in the context of the persistent manager instance. 
The actual query execution might be performed by the JDO PersistenceManager 
or might be delegated by the JDO PersistenceManager to its data store. 
The actual query executed thus might be implemented in a very different 
language from Java, and might be optimized to take advantage of particular 
query language implementations.
<P>Extents are collections of data store objects managed by the data store, 
not by explicit user operations on collections. Extent capability is a 
boolean property of classes that are persistence capable. If an instance 
of a class that has a managed extent is made persistent via reachability, 
the instance is put into the extent implicitly.
</body>
</html>
